From: Jasper St. Pierre Date: Wed, 19 Sep 2012 02:04:57 +0000 (-0300) Subject: grabHelper: Fix regression for dwelling with mouse down X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5805 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=2acb09766269fbf0a4ac2738059ce353b9950fe1;p=gnome-shell.git grabHelper: Fix regression for dwelling with mouse down b203a95a786af60257e55881c19b45192a0655b8 introduced a regression where we forgot to bail out if the pushModal didn't succeed properly. https://bugzilla.gnome.org/show_bug.cgi?id=684344 --- diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js index 0387b80e7..fccc2fb4d 100644 --- a/js/ui/grabHelper.js +++ b/js/ui/grabHelper.js @@ -148,31 +148,32 @@ const GrabHelper = new Lang.Class({ return true; params.savedFocus = focus; - this._grabStack.push(params); - if (params.modal) - this._takeModalGrab(); + if (params.modal && !this._takeModalGrab()) + return false; - if (params.grabFocus) - this._takeFocusGrab(hadFocus); + if (params.grabFocus && !this._takeFocusGrab(hadFocus)) + return false; if (hadFocus || params.grabFocus) _navigateActor(newFocus); + this._grabStack.push(params); return true; }, _takeModalGrab: function() { let firstGrab = (this._modalCount == 0); - this._modalCount++; - if (!firstGrab) - return; + if (firstGrab) { + if (!Main.pushModal(this._owner)) + return false; - if (!Main.pushModal(this._owner)) - return; + this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent)); + this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent)); + } - this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent)); - this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent)); + this._modalCount++; + return true; }, _releaseModalGrab: function() { @@ -196,23 +197,24 @@ const GrabHelper = new Lang.Class({ _takeFocusGrab: function(hadFocus) { let firstGrab = (this._grabFocusCount == 0); - this._grabFocusCount++; - if (!firstGrab) - return; + if (firstGrab) { + let metaDisplay = global.screen.get_display(); - let metaDisplay = global.screen.get_display(); + this._grabbedFromKeynav = hadFocus; + this._preGrabInputMode = global.stage_input_mode; + this._prevFocusedWindow = metaDisplay.focus_window; - this._grabbedFromKeynav = hadFocus; - this._preGrabInputMode = global.stage_input_mode; - this._prevFocusedWindow = metaDisplay.focus_window; + if (this._preGrabInputMode == Shell.StageInputMode.NONREACTIVE || + this._preGrabInputMode == Shell.StageInputMode.NORMAL) { + global.set_stage_input_mode(Shell.StageInputMode.FOCUSED); + } - if (this._preGrabInputMode == Shell.StageInputMode.NONREACTIVE || - this._preGrabInputMode == Shell.StageInputMode.NORMAL) { - global.set_stage_input_mode(Shell.StageInputMode.FOCUSED); + this._keyFocusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged)); + this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged)); } - this._keyFocusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged)); - this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged)); + this._grabFocusCount++; + return true; }, _releaseFocusGrab: function() {